package pe.gob.proviasnac.app.action;


import java.util.ArrayList;
import java.util.List;

import pe.gob.proviasnac.app.dto.ConsultaValidacionRegistroEmpresa;
import pe.gob.proviasnac.app.dto.ConsultaValidacionRegistroEmpresaCriteria;
import pe.gob.proviasnac.app.dto.Empresa;
import pe.gob.proviasnac.app.dto.Rolxusuario;
import pe.gob.proviasnac.app.dto.Usuario;
import pe.gob.proviasnac.app.model.ModelHelper;
import pe.gob.proviasnac.app.mybatis.SessionFactory;
import pe.gob.proviasnac.app.utiles.Constantes;
import pe.gob.proviasnac.app.utiles.ResultTransacction;
import pe.gob.proviasnac.app.utiles.SecuenciaUtil;

public class RegistrarEmpresaAction extends ModelHelper {

	private String txtConfirmeClave;
	private Empresa empresa;
	private ResultTransacction resultTransacction = new ResultTransacction();
	private Usuario usuario;
	private static final long serialVersionUID = 3210546916897939133L;
	
	@Override
	public String execute() throws Exception {

		session = SessionFactory.getSqlSessionFactory().openSession();
		
		Integer secuencia = SecuenciaUtil.obtenerSecuencia(Constantes.TABLA_USUARIO,session);
		empresa.setIdEmpresa(secuencia);
		empresa.setEstado(Constantes.ESTADO_ACTIVO);
		usuario.setIdUsuario(secuencia);
		
		ConsultaValidacionRegistroEmpresa validacion = this.consultaValidacionRegistroEmpresa(empresa.getRegistroMTC(), usuario.getNombreUsuario(), empresa.getNombreRazonSocial(), empresa.getNumeroRUC(), empresa.getCorreoElectronico());
		
		if(validacion.getExisteRegistroMTC() > 0){
			resultTransacction.setCodeResult(Constantes.BUSINESS_EXCEPTION);
			resultTransacction.setMessage(Constantes.RN_01);
			System.out.println("exepcion lanzada!");
			return SUCCESS;
		}
		if(validacion.getExisteNombreUsuario() > 0){
			resultTransacction.setCodeResult(Constantes.BUSINESS_EXCEPTION);
			resultTransacction.setMessage(Constantes.RN_02);
			System.out.println("exepcion lanzada!");
			return SUCCESS;
		}
		if(validacion.getExisteNombreRazonSocial() > 0){
			resultTransacction.setCodeResult(Constantes.BUSINESS_EXCEPTION);
			resultTransacction.setMessage(Constantes.RN_03);
			System.out.println("exepcion lanzada!");
			return SUCCESS;
		}
		if(validacion.getExisteNumeroRuc() > 0){
			resultTransacction.setCodeResult(Constantes.BUSINESS_EXCEPTION);
			resultTransacction.setMessage(Constantes.RN_04);
			System.out.println("exepcion lanzada!");
			return SUCCESS;
		}
		if(validacion.getExisteCorreoElec() > 0){
			resultTransacction.setCodeResult(Constantes.BUSINESS_EXCEPTION);
			resultTransacction.setMessage(Constantes.RN_05);
			System.out.println("exepcion lanzada!");
			return SUCCESS;
		}
		
		this.insertar(usuario);
		this.insertar(empresa);
		Rolxusuario rol = new Rolxusuario();
		rol.setIdRol(Constantes.ROL_REPRESENTANTE_EMPRESA_TRANSPORTE);
		rol.setIdUsuario(secuencia);
		this.insertar(rol);
		resultTransacction.setCodeResult(Constantes.TRANSACT_SUCCESS);
		this.commit();
		this.close();
		return SUCCESS;
	}
	
	public ConsultaValidacionRegistroEmpresa consultaValidacionRegistroEmpresa(String _registroMTC,String _nomUsuario, String _nombreRazonSocial,String _numeroRuc,String _correoElec){
		
		ConsultaValidacionRegistroEmpresaCriteria criteria = new ConsultaValidacionRegistroEmpresaCriteria();
		
		criteria.set_registroMTC(_registroMTC);
		criteria.set_nomUsuario(_nomUsuario);
		criteria.set_nombreRazonSocial(_nombreRazonSocial);
		criteria.set_numeroRuc(_numeroRuc);
		criteria.set_correoElec(_correoElec);
		
		List<ConsultaValidacionRegistroEmpresa> list = (ArrayList<ConsultaValidacionRegistroEmpresa>) this.selectByCriteria("ConsultaValidacionRegistroEmpresa", criteria);
		if(!list.isEmpty()){
			return list.get(0);
		}
		
		return null;
	}
	
	public String getTxtConfirmeClave() {
		return txtConfirmeClave;
	}
	public void setTxtConfirmeClave(String txtConfirmeClave) {
		this.txtConfirmeClave = txtConfirmeClave;
	}
	public Empresa getEmpresa() {
		return empresa;
	}
	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}
	public Usuario getUsuario() {
		return usuario;
	}
	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
	public ResultTransacction getResultTransacction() {
		return resultTransacction;
	}
	public void setResultTransacction(ResultTransacction resultTransacction) {
		this.resultTransacction = resultTransacction;
	}
}
